#ifndef __KERNELRELOAD_KERNELRELOAD_DRIVER_ENTRY_HPP__
#define __KERNELRELOAD_KERNELRELOAD_DRIVER_ENTRY_HPP__
#ifdef __cplusplus
extern "C" 
{
#endif

#include <ntifs.h>

#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
#	define C_API extern "C"
#else
#define C_API
#endif

enum { RELOAD_KERNEL, HOOK_SSDT, UNHOOK_SSDT, ADD_WHILTE_PID, ADD_BLACK_PID };

enum IO_CONTROL_CODE 
{ 
	IO_CONTROL_RELOAD_KERNEL	= CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 + RELOAD_KERNEL,	METHOD_BUFFERED, FILE_ANY_ACCESS), 
	IO_CONTROL_HOOK_SSDT		= CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 + HOOK_SSDT,		METHOD_BUFFERED, FILE_ANY_ACCESS), 
	IO_CONTROL_UNHOOK_SSDT		= CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 + UNHOOK_SSDT,	METHOD_BUFFERED, FILE_ANY_ACCESS), 
	IO_CONTROL_ADD_WHILTE_PID	= CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 + ADD_WHILTE_PID, METHOD_BUFFERED, FILE_ANY_ACCESS), 
	IO_CONTROL_ADD_BLACK_PID	= CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800 + ADD_BLACK_PID,	METHOD_BUFFERED, FILE_ANY_ACCESS),
};

void DriverUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS DriverCreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS DriverIoControlHandler(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);

C_API NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath);


#endif//__KERNELRELOAD_KERNELRELOAD_DRIVER_ENTRY_HPP__